import json
import types
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.hunyuan.v20230901 import hunyuan_client, models

class ChatCompletions:
    def __init__(self, secret_id, secret_key):
        self.secret_id = secret_id
        self.secret_key = secret_key
        # 预定义提示词模板
        self.prompt_templates = {
            "data_analysis": """
            你是一个专业的数据分析师，请基于以下数据回答用户问题：
            
            {data_description}
            
            用户问题：{question}
            
            回答要求：
            1. 根据问题复杂度调整回答深度：
               - 简单计算类问题：直接给出计算过程和结果
               - 统计分析类问题：提供必要的统计指标和解释
               - 洞察分析类问题：展开详细的分析和建议
            
            2. 回答原则：
               - 优先直接回答用户问题
               - 确保计算准确性
               - 使用简洁专业的语言
               - 必要时补充相关见解
               - 避免无关信息
            """,
            
            "data_insight": """
            请分析这份数据的关键特征和见解：
            
            {data_description}
            
            分析要求：
            1. 基本特征：数据规模、类型分布
            2. 关键统计：均值、分布、异常值
            3. 重要发现：趋势、模式、关联
            4. 改进建议：数据质量、补充维度
            
            注意：
            - 突出重要发现
            - 保持分析精简
            - 重点突出异常和特殊情况
            """
        }
        
    def get_prompt_template(self, template_name=None):
        """获取预定义的提示词模板"""
        if template_name and template_name in self.prompt_templates:
            return self.prompt_templates[template_name]
        # 如果没有指定模板或模板不存在，返回默认模板
        return self.prompt_templates["data_analysis"]
        
    def chat_completions(self, input_text, template_name=None):
        """
        发送聊天请求
        :param input_text: 输入文本或SQL查询结果
        :param template_name: 模板名称
        :return: API响应或错误信息
        """
        try:
            if not input_text:
                return "请输入有效的问题"
                
            # 实例化认证对象
            cred = credential.Credential(self.secret_id, self.secret_key)
            httpProfile = HttpProfile()
            httpProfile.endpoint = "hunyuan.tencentcloudapi.com"
            clientProfile = ClientProfile()
            clientProfile.httpProfile = httpProfile
            
            # 实例化客户端
            client = hunyuan_client.HunyuanClient(cred, "ap-guangzhou", clientProfile)
            req = models.ChatCompletionsRequest()
            
            # 构建系统提示词
            system_prompt = self.get_prompt_template(template_name)
            
            # 构建请求参数
            params = {
                "Messages": [
                    {
                        "Role": "system",
                        "Content": system_prompt
                    },
                    {
                        "Role": "user",
                        "Content": input_text
                    }
                ],
                "Model": "hunyuan-turbo-20241120"
            }
            
            req.from_json_string(json.dumps(params))
            resp = client.ChatCompletions(req)
            
            # 处理响应
            if isinstance(resp, types.GeneratorType):
                responses = []
                for event in resp:
                    responses.append(event)
                return responses
            return resp.to_json_string()
            
        except TencentCloudSDKException as err:
            print(f"API调用错误: {err}")
            return f"分析失败: {str(err)}"
        except Exception as e:
            print(f"发生错误: {str(e)}")
            return f"处理失败: {str(e)}"

